#pragma once


#include <QPoint>
#include <QImage>
#include <array>

#include <boost/iterator/iterator_facade.hpp>
#include <boost/operators.hpp>

#include <functional>




#include <QRectF>
#include <array>

class QDebug;

class  KisBezierPatch
{
public:
    enum ControlPointType {
        TL = 0,
        TL_HC,
        TL_VC,
        TR,
        TR_HC,
        TR_VC,
        BL,
        BL_HC,
        BL_VC,
        BR,
        BR_HC,
        BR_VC
    };

    QRectF originalRect;
    std::array<QPointF, 12> points;

    QRectF dstBoundingRect() const;

    QRectF srcBoundingRect() const;

    QPointF localToGlobal(const QPointF& pt) const;
    QPointF globalToLocal(const QPointF& pt) const;

    void sampleRegularGrid(QSize& gridSize,
        QVector<QPointF>& origPoints,
        QVector<QPointF>& transfPoints,
        const QPointF& dstStep) const;

    void sampleRegularGridSVG2(QSize& gridSize,
        QVector<QPointF>& origPoints,
        QVector<QPointF>& transfPoints,
        const QPointF& dstStep) const;
};




